import axios from "axios";
import store from "../store";
const request = axios.create({
  baseURL: "/api",
  timeout: 20000,
});

// 获取取消请求的构造函数
const CancelToken = axios.CancelToken;

request.interceptors.request.use((config) => {
  // 获取所有已经发出去的请求
  const url = config.url;
  console.log("已经发出去的请求---", url);
  config.cancelToken = new CancelToken((cb) => {
    // cb函数是取消当前请求的函数
    // 往vuex里保存发出去的请求和当前请求对应的取消请求函数
    store.commit("addFns", { url, cb });
  });
  return config;
});

request.interceptors.response.use((response) => {
  // 获取所有已经请求完成的请求
  const url = response.config.url;
  // 删除vuex里已经保存的发出去的请求
  store.commit("delFn", url);
  console.log("已经请求完成的请求", url);
  return response.data;
});

export default request;
